Discrete convolution

이산 합성곱(Discrete convolution)
이산 합성곱은 CNN의 기본 연산이다.
1차원 이산 합성곱 연산
y=x*w

x는 입력(신호라고도 부른다.)
w는 필터(filter, 혹은 kernel이라고도 부른다.)
패딩(padding)
x의 인덱스 밖을 연산을 위해 0으로 채우는 방법을 제로패딩(zero padding) 또는 패딩(padding)이라고 부른다.
앞 뒤로 패딩이 되기 때문에 x와 필터 w가 각각 n, m개의 원소를 가지고 m<=n이라면,
p=2로 패딩이 된 벡터 x_p의 크기는 n+2p이다.

y=x*m -> y[i]=sigma{x_p[i+m-k]w[k]} from k=0 to m-1
이처럼 x와 w가 다른 방향으로 인덱싱되는 것은 파딩된 후 x또는 w 벡터 중 하나를 뒤집어 계산하는 것과 동일하다.
w를 뒤집어서 회전시킨 필터를 w_r이라고 할 때,
y[i]=x[i:i+m]w_r로 볼 수 있다.

위의 연산을 모든 출력 원소를 얻기 위해 슬라이딩 윈도우(sliding window 방식으로 반복한다.)
스트라이드(stride)
회전된 필터가 이동하는 양을 스트라이드(stride)라고 하며, 이 또한 하나의 합성곱 하이퍼 파라미터이다.
스트라이드는 입력 벡터의 크기보다는 작은 양수 값이어야 한다.
교차상관(cross-correlation)
교차 상관은 합성곱과 비슷하지만, 합성곱에서 w(필터)를 뒤집어서 곱셈을 수행했다면,
교차 상관은 곱셈이 같은 방향으로 수행된다.(필터 행렬을 차원별로 회전시킬 필요가 없다.)

딥러닝 프레임워크 대부분(텐서플로 포함) 실제로는 교차상관으로 계산을 수행하지만, 관례적으로 합성곱이라고 부른다.